//
//  HRStatusListViewModel.swift
//  微博
//
//  Created by 众力金融 on 2017/1/11.
//  Copyright © 2017年 众力金融. All rights reserved.
//

import Foundation

//微博数据列表视图模型
/*
 父类的选择
 - 如果类需要使用 'KVC' 或者字典转模型的框架 累需要继承 NSObject
 - 如果类知识包装一些代码逻辑 可以不用任何的父类 好处: 更轻量级
 */

fileprivate let maxPullupTryTimes = 3
class HRStatusListViewModel {
    
    //微博模型数组懒加载
    lazy var statusList = [HRStatus]()
    ///上拉刷新错误的次数
    fileprivate var pullupErrortimes = 0
    
    /// 加载微博列表
    ///
    /// - Parameters:
    ///   - pullup: 是否上拉刷新标记
    ///   - completion: 完成回调(网络请求是否成功)
    func loadStatus(pullup: Bool, completion: @escaping (_ isSuccess: Bool, _ hssMorePull: Bool)->()) {
        
        //判断是否是上拉刷新 同时检查刷新错误
        if pullup && pullupErrortimes > maxPullupTryTimes {
            completion(true, false)
            return
        }
        
        
        //since_id 取出数组第一条微博的 id
        let since_id = pullup ? 0 : (statusList.first?.id ?? 0)
        //max_id 上拉刷新取出数组的最后一条微博的id
        let max_id = !pullup ? 0 : (statusList.last?.id ?? 0)
        HRNetworkManager.shared.statusList(since_id: since_id, max_id: max_id) { (list, isSuccess) in
            
            //字典转模型
            guard let array = NSArray.yy_modelArray(with: HRStatus.self, json: list ?? []) as? [HRStatus] else {
                completion(isSuccess, false)
                return
            }
            //拼接数据
            if pullup {
                self.statusList += array
            } else {
               self.statusList = array + self.statusList
            }
            
            //判断上拉刷新的数据量
            if pullup && array.count == 0 {
                self.pullupErrortimes += 1
                 completion(isSuccess, false)
            }else {
                //完成回调
                completion(isSuccess, true)
            }
            
            
        }
    }
    
}
